﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using hou_elearning.Entity;
using hou_elearning.Business;
using hou_elearning.Custom;

public partial class Admin_control_ucKhoahoc : System.Web.UI.UserControl
{
    private List<KhoahocEntity> glbLstGrvDatasource = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            napGrvKhoahoc(true);
            napDdlChungchi();
            napDdlGiangvien();
        }
    }
    /// <summary>
    /// Hiển thị danh sách các bài học
    /// Kiểm tra người dùng có chọn chỉ hiển thị khóa học trong bài học
    /// hay chọn tất cả (mặc định hiển thị tất cả)
    /// </summary>
    /// <param name="bLoadFromDB">Cho biết có load danh sách từ Database hay không</param>
    /// <author>liemqv</author>
    /// <create>30/04/2012</create>
    /// 
    public void napGrvKhoahoc(bool bLoadFromDB)
    {
        Boolean bOnlyInCourse = true;
        if (Session["bOnlyMyCourse"] == null)
        {
            Session["bOnlyMyCourse"] = false;
        }
        else
        {
            bOnlyInCourse = Boolean.Parse(Session["bOnlyMyCourse"].ToString());
        }
        if (bLoadFromDB == true || Cache["cacheLstGrvDatasource"] == null)
        {
            glbLstGrvDatasource = KhoahocBRL.GetAll();
            Cache["cacheLstGrvDatasource"] = glbLstGrvDatasource;
        }
        glbLstGrvDatasource = (List<KhoahocEntity>)Cache["cacheLstGrvDatasource"];
        if (glbLstGrvDatasource.Count <= 0)
        {
            divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Không có bản ghi nào để hiển thị!</span></p>";
        }
        else
        {
            if(bOnlyInCourse == true)
            {
                Int64 PK_iNguoidungID = iGetUserLogin();
                grvKhoahoc.DataSource = glbLstGrvDatasource.FindAll(
                delegate(KhoahocEntity oKhoahoc)
                {
                    return oKhoahoc.FK_iGiangvienID == PK_iNguoidungID;
                });
            }
            else
            {
                grvKhoahoc.DataSource = glbLstGrvDatasource;
            }
            grvKhoahoc.DataKeyNames = new string[] { "PK_iKhoahocID" };
            grvKhoahoc.DataBind();
        }
    }

    /*
     * Hàm reset để xóa trắng form nhâp thông tin
     */
    public void resetForm()
    {
        txtTenkhoahoc.Text = "";
        txtKyhieu.Text = "";
        txtSoluongdukien.Text = "";
        txtUrlAnhminhhoa.Text = "Chưa chọn ảnh...";
        txtGhichu.Text = "";
    }
    /*
     * Hàm nạp dữ liệu cho form theo ID truyền vào
     * Tham số: truyền vào ID
     * Thực hiện: Lấy thông tin đối tượng theo ID và nạp vào form
     */
    public void napForm(Int64 iPK_ID)
    {
        KhoahocEntity oKhoahoc = KhoahocBRL.GetOne(iPK_ID);
        if (oKhoahoc != null)
        {
            txtTenkhoahoc.Text = oKhoahoc.sTenkhoahoc;
            txtKyhieu.Text = oKhoahoc.sKyhieu;
            ddlLoaikhoahoc.SelectedItem.Selected = false;
            ddlLoaikhoahoc.Items.FindByValue(oKhoahoc.iTrangthai.ToString()).Selected = true;
            txtSoluongdukien.Text = oKhoahoc.iSoluongdukien.ToString();
            ddlChungchi.SelectedItem.Selected = false;
            ddlChungchi.Items.FindByValue(oKhoahoc.FK_iChungchiID.ToString()).Selected = true;
            ddlGiangvien.SelectedItem.Selected = false;
            ddlGiangvien.Items.FindByValue(oKhoahoc.FK_iGiangvienID.ToString()).Selected = true;
            txtGhichu.Text = oKhoahoc.sGhichu;
            txtUrlAnhminhhoa.Text = oKhoahoc.sAnhminhhoa;
            imgAnhmihhoa.ImageUrl = oKhoahoc.sAnhminhhoa;
            divThongbao.InnerHtml = "";
        }
    }
    /*
     * Hàm nạp DropDownList chứng chỉ
     */
    public void napDdlChungchi()
    {
        List<ChungchiEntity> lstChungchi = ChungchiBRL.GetAll();
        ddlChungchi.DataSource = lstChungchi;
        ddlChungchi.DataTextField = "sTenchungchi";
        ddlChungchi.DataValueField = "PK_iChungchiID";
        ddlChungchi.DataBind();
    }
    /*
     * Hàm nạp DropDownList giảng viên
     */
    public void napDdlGiangvien()
    {
        NhomnguoidungEntity oNhomnguoidung = NhomnguoidungBRL.GetBysKyhieu("GV"); //Lấy 1 nhóm theo mã (ký hiệu)
        List<Nguoidung_nhomEntity> lstNguoidungNhom = Nguoidung_nhomBRL.GetByFK_iNhomnguoidungID(oNhomnguoidung.PK_iNhomnguoidungID);
        List<NguoidungEntity> lstNguoidung = NguoidungBRL.GetAll();
        List<NguoidungEntity> lstGiangvien = new List<NguoidungEntity>();
        NguoidungEntity oNguoidungFound = null;
        foreach (Nguoidung_nhomEntity oNguoidungNhomSrc in lstNguoidungNhom)
        {
            oNguoidungFound = null;
            oNguoidungFound = lstNguoidung.Find(
                delegate(NguoidungEntity oNguoidungDes) { return oNguoidungDes.PK_iNguoidungID == oNguoidungNhomSrc.FK_iNguoidungID; }
            );
            if (oNguoidungFound != null)
            {
                lstGiangvien.Add(oNguoidungFound);
            }
        }
        //Hủy biến
        lstNguoidung = null;
        lstNguoidungNhom = null;
        //Nạp vào ddl
        ddlGiangvien.DataSource = lstGiangvien;
        ddlGiangvien.DataTextField = "sHoten";
        ddlGiangvien.DataValueField = "PK_iNguoidungID";
        ddlGiangvien.DataBind();
        //Hủy biến
        lstGiangvien = null;
    }
    /// <summary>
    /// Lấy ID người dùng đăng nhập
    /// </summary>
    /// <author>liemqv</author>
    /// <create>25/04/2012</create>
    /// 
    public Int64 iGetUserLogin()
    {
        Int64 PK_iNguoidungID = 0;
        try
        {
            if (Session["UserID"] != null)
            {
                PK_iNguoidungID = Int64.Parse(Session["UserID"].ToString());
            }
        }
        catch (Exception ex)
        {
            PK_iNguoidungID = 0;
        }
        return PK_iNguoidungID;
    }
    protected void grvKhoahoc_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvKhoahoc.PageIndex = e.NewPageIndex;
        napGrvKhoahoc(false);
    }
    protected void grvKhoahoc_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int iIndex;
        Int64 iPK_ID;
        iIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = grvKhoahoc.Rows[iIndex];
        iPK_ID = Int64.Parse(row.Cells[1].Text);
        if (e.CommandName == "Sua")
        {
            btnOK.CommandName = "Edit";
            btnOK.Text = "<span>Sửa<span>";
            btnOK.CommandArgument = iPK_ID.ToString();
            btnOK.CausesValidation = false;
            panEdit.Visible = true;
            napForm(iPK_ID);
        }
        else
            if (e.CommandName == "Xoa")
            {
                /*
                 * Thực hiện tác vụ xóa
                 * Phải đảm bảo xóa được trong Database và xóa trong danh sách.
                 * Nhưng không phải load lại từ database để hiển thị
                 */
                KhoahocBRL.Remove(iPK_ID); //Xóa trong database
                //Tìm đối tượng khóa học theo ID trong danh sách lấy từ cache
                glbLstGrvDatasource = (List<KhoahocEntity>)Cache["cacheLstGrvDatasource"];
                KhoahocEntity oKhoahocDelete = glbLstGrvDatasource.Find
                (
                    delegate(KhoahocEntity oKhoahocByID)
                    {
                        return oKhoahocByID.PK_iKhoahocID == iPK_ID;
                    }
                );
                if (oKhoahocDelete != null)
                {
                    glbLstGrvDatasource.Remove(oKhoahocDelete); //Xóa trong danh sách
                }
                napGrvKhoahoc(false);
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa khóa học " + oKhoahocDelete.sTenkhoahoc + " thành công!</span></p>";
            }
        else
            if(e.CommandName == "Baihoc")
            {
                /*
                 * Chuyển sang trang quản lý bài học
                 */
                Session["PK_iKhoahocID"] = iPK_ID; //Tạo Session để lưu ID của khóa học hiện tại phục vụ cho hiển thị danh sách bài học theo khóa học
                Response.Redirect(ResolveUrl("~/Admin/?page=Baihoc"));
            }
    }
    protected void grvKhoahoc_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SortDirection"] == null)
            ViewState["SortDirection"] = "ASC";
        else
        {
            ViewState["SortDirection"] = ViewState["SortDirection"].ToString() == "ASC" ? "DESC" : "ASC";
        }
        List<KhoahocEntity> lstQuyen = (List<KhoahocEntity>)Cache["cacheLstGrvDatasource"];
        glbLstGrvDatasource = KhoahocEntity.Sort(lstQuyen, e.SortExpression, ViewState["SortDirection"].ToString());
        napGrvKhoahoc(false);
    }
    protected void grvKhoahoc_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Label lblChungchi = null;
        Label lblGiangvien = null;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            lblChungchi = (Label)e.Row.FindControl("lblChungchi");
            lblGiangvien = (Label)e.Row.FindControl("lblGiangvien");
            Int64 PK_iGiangvienID = Int64.Parse(lblGiangvien.Text);
            lblGiangvien.Text = NguoidungBRL.GetOne(PK_iGiangvienID).sHoten;
            //
            short PK_iChungchiID = short.Parse(lblChungchi.Text);
            lblChungchi.Text = ChungchiBRL.GetOne(PK_iChungchiID).sTenchungchi;
        }
    }
    protected void btnSearchByID_Click(object sender, EventArgs e)
    {
        string strSearch = txtSearchByID.Text;
        short iPK_ID = 0;
        List<KhoahocEntity> lstSearchResult = null;
        glbLstGrvDatasource = (List<KhoahocEntity>)Cache["cacheLstGrvDatasource"];
        if (txtID.Text.Trim().Equals(""))
        {
            iPK_ID = 0;
        }
        else
        {
            iPK_ID = Int16.Parse(txtID.Text);
        }
        /* Nếu người dùng không nhập ID thì tìm theo từ khóa */
        if (iPK_ID == 0)
        {
            lstSearchResult = glbLstGrvDatasource.FindAll(
            delegate(KhoahocEntity oKhoahoc)
            {
                return oKhoahoc.sTenkhoahoc.ToUpper().Contains
                (
                    strSearch.ToUpper()) || 
                    oKhoahoc.sKyhieu.ToUpper().Contains(strSearch.ToUpper()) ||
                    oKhoahoc.sGhichu.ToUpper().Contains(strSearch.ToUpper());
            });
        }
        /* Tìm theo ID */
        else
        {
            lstSearchResult = glbLstGrvDatasource.FindAll
            (
                delegate(KhoahocEntity oKhoahocByID)
                {
                    return oKhoahocByID.PK_iKhoahocID == iPK_ID;
                }
            );
        }
        /* Hiển thị thông báo */
        if (lstSearchResult.Count == 0)
        {
            napGrvKhoahoc(false);
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Không tìm thấy bản ghi nào phù hợp</span></p>";
        }
        else
        {
            grvKhoahoc.DataSource = lstSearchResult;
            grvKhoahoc.DataBind();
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Tìm thấy " + lstSearchResult.Count + " bản ghi phù hợp!</span></p>";
        }
    }
    protected void btnShowAll_Click(object sender, EventArgs e)
    {
        Session["bOnlyMyCourse"] = false;
        napGrvKhoahoc(false);
        divThongbao.InnerHtml = "";
    }
    /*
     * Hiện loại khóa học theo trạng thái
     */
    public String getTenloaiKhoahoc(short iLoai)
    {
        String sRes = "";
        switch(iLoai)
        {
            case 0:
                sRes = "Giới hạn về thời gian";
                break;
            case 1:
                sRes = "Không giới hạn thời gian";
                break;
            case 2:
                sRes = "Khóa học đã kết thúc";
                break;
        }
        return sRes;
    }
    protected void btnOK_Click(object sender, EventArgs e)
    {
        /*
         * Khi người dùng nhấn nút OK (Thêm, sửa) sẽ thực hiện tác vụ thêm hoặc sửa
         */
        try
        {
            /* Khởi tạo đối tượng mới và gán giá trị cho đối tượng này từ các trường trong form nhập */
            KhoahocEntity oKhoahocOld = null;
            KhoahocEntity oKhoahoc = null;
            Int64 iPK_ID = 0;
            oKhoahoc = new KhoahocEntity();
            oKhoahoc.sTenkhoahoc = txtTenkhoahoc.Text.Trim();
            oKhoahoc.sKyhieu = txtKyhieu.Text.Trim().ToUpper();
            oKhoahoc.iTrangthai = short.Parse(ddlLoaikhoahoc.SelectedValue);
            oKhoahoc.iSoluongdukien = short.Parse(txtSoluongdukien.Text.Trim());
            oKhoahoc.FK_iNguoicapnhatID = iGetUserLogin();
            oKhoahoc.dNgaycapnhat = DateTime.Now;
            oKhoahoc.FK_iChungchiID = short.Parse(ddlChungchi.SelectedValue);
            oKhoahoc.FK_iGiangvienID = Int64.Parse(ddlGiangvien.SelectedValue);
            oKhoahoc.sAnhminhhoa = txtUrlAnhminhhoa.Text;
            oKhoahoc.sGhichu = txtGhichu.Text;
            /* Kiểm tra tác vụ đang là thêm hay sửa */
            if (btnOK.CommandName == "Edit")
            {
                iPK_ID = Int64.Parse(btnOK.CommandArgument);
                oKhoahocOld = KhoahocBRL.GetOne(iPK_ID);
                oKhoahoc.PK_iKhoahocID = iPK_ID;
                oKhoahoc.FK_iNguoitaoID = oKhoahocOld.FK_iNguoitaoID;
                oKhoahoc.dNgaytao = oKhoahocOld.dNgaytao;
                KhoahocBRL.Edit(oKhoahoc); //Gọi tác vụ sửa
                btnOK.CausesValidation = true;
                /*  Hiển thị thông báo */
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Sửa khóa học " + oKhoahoc.sTenkhoahoc + " thành công!</span></p>";
                /* Nạp lại dữ liệu */
                panEdit.Visible = false;
                napGrvKhoahoc(true);
            }
            else
            {
                /* Kiểm tra có trùng các trường */
                //if (KhoahocCustomBRL.bCheckDupByTennhom(oKhoahoc.sTennhom) == true)
                //{
                //    divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Nhóm người dùng " + oKhoahoc.sTennhom + " đã tồn tại!</span></p>";
                //}
                //else
                //{
                    /* Thêm mới */
                    oKhoahoc.dNgaytao = DateTime.Now;
                    oKhoahoc.dNgaycapnhat = DateTime.Now;
                    oKhoahoc.FK_iNguoitaoID = iGetUserLogin();
                    oKhoahoc.FK_iNguoicapnhatID = iGetUserLogin();
                    iPK_ID = KhoahocBRL.Add(oKhoahoc);
                    if (iPK_ID > 0)
                    {
                        divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Thêm khóa học " + oKhoahoc.sTenkhoahoc + " thành công!</span></p>";
                        /* Nạp lại dữ liệu */
                        panEdit.Visible = false;
                        napGrvKhoahoc(true);
                    }
                //}
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        resetForm();
        btnOK.CommandName = "Add";
        panEdit.Visible = false;
    }
    protected void lbtnAdd_Click(object sender, EventArgs e)
    {
        btnOK.CommandName = "Add";
        btnOK.Text = "<span>Thêm</span>";
        panEdit.Visible = true;
        resetForm();
    }
    protected void lbtnDelete_Click(object sender, EventArgs e)
    {
        try
        {
            glbLstGrvDatasource = (List<KhoahocEntity>)Cache["cacheLstGrvDatasource"];
            KhoahocEntity oKhoahocDelete = null;
            int iDeleteCount = 0; //Đếm số lượng bản ghi xóa thành công
            /* Lặp với mỗi hàng, tìm hàng đã chọn, tìm ra ID và xóa theo ID */
            foreach (GridViewRow row in grvKhoahoc.Rows)
            {
                CheckBox chkDelete = row.FindControl("chkDelete") as CheckBox;
                Int16 iID = Convert.ToInt16(grvKhoahoc.DataKeys[row.RowIndex].Values["PK_iKhoahocID"]);
                if ((chkDelete != null) && (chkDelete.Checked == true))
                {
                    KhoahocBRL.Remove(iID); //Xóa trong database
                    /* Tìm đối tượng khóa học theo ID trong danh sách */
                    oKhoahocDelete = glbLstGrvDatasource.Find
                    (
                        delegate(KhoahocEntity oKhoahocByID)
                        {
                            return oKhoahocByID.PK_iKhoahocID == iID;
                        }
                    );
                    glbLstGrvDatasource.Remove(oKhoahocDelete); //xóa trong list cache
                    ++iDeleteCount;
                }
            }
            napGrvKhoahoc(false);
            if (iDeleteCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa thành công " + iDeleteCount + " bản ghi!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void btnMyCourses_Click(object sender, EventArgs e)
    {
        Session["bOnlyMyCourse"] = true;
        napGrvKhoahoc(false);
    }
}